var childClicked = false;
/**
 * Metodo encargado de los css de 
 * botones
 * textarea
 */
function css() {
	$( ".btntrash" ).button({
        icons: {
            primary: "ui-icon-trash"
        },
        text: false
    });
	
	$( ".btnadd" ).button({
        icons: {
            primary: "ui-icon-plus"
        },
        text: false
    });
	
	$( ".btnaddext" ).button({
        icons: {
            primary: "ui-icon-plus"
        },
        text: true
    });
	
	$( ".btnsave" ).button({
        icons: {
            primary: "ui-icon-check"
        },
        text: true
    });
	
	$(".btngeneric").css("width", "20px");
	$(".btngeneric").css("height", "20px");
	$(".btngeneric").css("top", "5px");
	$(".btngeneric").css("padding-left", "5px");
	$(".btngeneric").css("padding-right", "5px");
	
	$(".btnnormal").css("width", "100px");
	$(".btnnormal").css("height", "30px");
	
	$(".btnextended").css("width", "180px");
	$(".btnextended").css("height", "30px");
	
	$(".btntextarea").css("top", "0px");
	
	$('.textarea').autosize();
	$(".genericScreen").corner("5px");
	
	loadJQueryDatePickerCSS();
}

/**
 * Funcion que se carga en el onload
 * y escucha los click de los elementos nietos
 */
$(".cn-cmp").click(function () {
	algoQueHaceCuandoDasClick(this);
});

/**
 * 
 * @param cmp Elemento HTML que realiza el evento
 */
function algoQueHaceCuandoDasClick(cmp) {
	var cmpClicked = $(cmp).attr("id");
	var cmpSel = $("#cmpSelected").val();

	var jQueryCmp = "#"+cmpClicked+" .lbl-click";
	$(jQueryCmp).css("visibility", "visible");
	
	var jQuerylbl = "#"+cmpClicked+" .lblSpan";
	var jQueryCombo = "#"+cmpClicked+" .combobox";
	
	$(jQuerylbl).css("display", "none");
	$(jQueryCombo).css("display", "inline");
	
	if(cmpClicked!=cmpSel){
		if($("#cmpSelected").val()) {
			unSelect(cmpSel, cmpSel);
		}
		
		$("#cmpSelected").val(cmpClicked);
	}
	
	/** Flag to child click event **/
    childClicked = true;
}

/**
 * Funcion que se carga en el onload
 * y escucha los click de la forma
 */
$(".a-form").click(function () {
	if(childClicked) {
		childClicked = false;
		/** 
		 * Cuando el evento viene de un hijo de parte del padre no se 
		 * ejecuta ninguna accion
		 **/
	} else {
		var cmpClicked = $(this).attr("id");
		var cmpSel = $("#cmpSelected").val();
		if(cmpSel!="") {
			unSelect(cmpSel, cmpClicked);
		}
		
		var cmpOnPlay = $("#cmpPlay").val();
		if(cmpOnPlay != "") {
			var jQuerylblCmp = "#"+cmpOnPlay+" .txtlbl";
			var dataJQlblCmp = $(jQuerylblCmp).val();
			if(dataJQlblCmp=="") {
				$("#"+cmpOnPlay).remove();
				$("#cmpPlay").val("");
			}
		}
	}
});

/**
 * Esta funcion selecciona el div cuando el mouse pasa 
 * por encima de el
 * @param cmp Componente HTML que ejecuta la accion
 */
function mm(cmp) {
	var jQueryCmp = "#"+cmp.id; 
	$(jQueryCmp).css("background-color", "#eaeaea");
	
	var JQuerySon = jQueryCmp+" .lbl";
	$(JQuerySon).css("background-color", "#f8f8f8");
}

/**
 *  Esta funcino deselecciona el div cuando el mouse sale
 *  de el
 * @param cmp componente HTML que ejecuta la acciono
 */
function mo(cmp) {
	var cmpSel = $("#cmpSelected").val();
	
	if(cmpSel!=cmp.id) {
		var jQueryCmp = "#"+cmp.id; 
		moDet(jQueryCmp);
	}
}

/**
 * Funcion que deselecciona un elemento al dar click fuera de el
 * @param cmpSel componente seleccionado al momento de ejecutar la accion
 * @param cmpClicked componente que ejecuta el evento 
 */
function unSelect(cmpSel, cmpClicked) {
	var jQueryCmp = "#"+cmpSel;
	moDet(jQueryCmp);

	var jQueryCmp = "#"+cmpClicked+" .lbl-click";
	$(jQueryCmp).css("visibility", "hidden");
	$("#cmpSelected").val("");
}

/**
 * Complemento de la funcion mo(cp) para la deseleccion de componentes HTML
 * @param jQueryCmp componente jquery el cual se deseleccionara
 */
function moDet(jQueryCmp) {
	$(jQueryCmp).css("background-color", "#ffffff");
	var JQuerySon = jQueryCmp+" .lbl";
	$(JQuerySon).css("background-color", "#ffffff");
}

/**
 * <ul>
 * <li> 1 - Eliminar Componente.
 * <li> 2 - Agregar Componente.
 * <li> 3 - Guardar
 * </ul>
 * @param btnCmp - Componente Boton
 * @param option - Opcion seleccionada.
 */

var formParentDialog;
function buttonClick(btnCmp, option) {
	
	var divID = $("#"+btnCmp.id).parent().attr("id");
	var parentID = $("#"+divID).parent().attr("id");
	
	var JQueryCmp = "#"+parentID;
	var JQueryDiv = "#"+divID;
	
	var childElements = $(JQueryCmp).children();
	var childLength = parseInt(childElements.length);
	
	var key = parseInt(option);
	switch (key) {
	case 1: /** Eliminar componente **/
		var indexElement = parseInt(divID.split("_")[1]);
		
		var JQueryc = "#"+parentID;
		
		var typeComponent = $(JQueryc).attr("class");
		if(dropEntitie(($(JQueryc).parent().attr("id")), divID, typeComponent)) {
			if(childLength==1 || indexElement == 1) {
				resetCmpInForm(parentID, divID);
			} else {
				$(JQueryDiv).remove();
				reasignIDs(parentID);
			}
		}
		break;
	case 2: /** Agregar componente **/
		
		var indexToInsert = childLength+1;
		var divElement = getTemplateByComponent(parentID).replace(/{index}/g, ""+indexToInsert);
		$(divElement).appendTo("#"+parentID);
		
		css();
		
		$("#"+parentID+"_"+indexToInsert).click( function() {
			algoQueHaceCuandoDasClick(this);
		});
		
		var cmpOnPlay = parentID+"_"+indexToInsert;
		$("#cmpPlay").val(cmpOnPlay);
		break;
	case 3: /** Guarda en server JSON **/
		var formToSave = btnCmp.id.split("_")[0];
		save(formToSave);
		break;
	case 4: /** Open Generic Dialog **/
		var client = $("#newClientID").val();
		if(client=="") {
			alert("Favor de seleccionar o crear un Cliente");
		} else {
			formParentDialog =  btnCmp.id.split("_")[0];
			//alert(formParentDialog);
			$(".dialog").dialog("open");
		}
		break;
	default:
		break;
	}
}

/**
 * Apenas lo ando definiendo... la vdd no se como hacerlo que sea
 * efectivo :) :| :( ;(
 * @param formToSave Forma sobre la cual se hara el save :)
 */
function save(form) {
	//alert(form);
	if(form=="c-form") {
		saveClient();
	} else if(form=="ct-form") {
		saveContact();
	} else if(form=="s-form") {
		saveDemand();
	} else if(form=="ca-form") {
		saveCandidate();
	}
}

function dropEntitie(form, div, typeCmp) {
	var dropped = false;
	if(typeCmp=="inputData") {
		dropped = true;
	} else {
		if(form=="c-form" || form =="c2-form") {
			dropped = dropEntitieClient(div);
		} else if(form=="ct-form" || form =="ct2-form") {
			dropped = dropEntitieClient(div);
		} else if("s-form" || "s2-form") {
			dropped = true;
		}
	}
	return dropped;
}

function getDataChilds(chPh) {
	var array = new Array();
	for(var i=0; i<chPh.length; i++) {
		var JQueryCombo = "#"+chPh[i].id+" .lbl .combobox option:selected";
		var JQueryValue = "#"+chPh[i].id+" .txtlbl";
		var JQueryID 	= "#"+chPh[i].id+" .dbID";

		var element = {
				"option" : $(JQueryCombo).attr("id")+"_"+$(JQueryValue).val()+"_"+$(JQueryID).val()
		};
		array.push(element);
	}
	
	return array;
}

function getMsgEmptyData(arrayEmpty) {
	var msg = "";
	for(var index=0; index<arrayEmpty.length; index++) {
		if(index == (arrayEmpty.length-1)) {
			msg += arrayEmpty[index]; 
		} else {
			msg += arrayEmpty[index]+", ";
		}
	}
	return msg;
}

function getTemplateByComponent(parentID) {
	
	var jsonReq = {
			process : "addComp",
			parent	: parentID
	};
	var jsonResp = ajaxJSONtoPOST(Object.toJSON(jsonReq), serviceDemand);
	if(jsonResp.Flag=="true") {
		return jsonResp.HTMLCode;
	} else {
		alert("Error al agregar componente");
		return "";
	}
}

function resetCmpInForm(parentID, divID) {
	
	var cmpType = $("#"+parentID).attr("class");
	if(cmpType == "inputData") {
		var jQuerylbl = "#"+divID+" .txtlbl";
		$(jQuerylbl).val("");
		
	} else if(cmpType == "selectData") {
		
		var jQuerylbl = "#"+divID+" .lblSpan";
		var jQueryCombo = "#"+divID+" .combobox";
		
		$(jQueryCombo).css("display", "none");
		$(jQuerylbl).css("display", "inline");
		
		var jQuerylbl = "#"+divID+" .txtlbl";
		$(jQuerylbl).val("");
	} else if(cmpType == "comboData") {
		var JQueryCmb = "#"+divID+" .lblcombo .combo";
		$(JQueryCmb+" option:eq(0)").attr("selected","selected");
	}
}

function reasignIDs(parentID) {
	var JQueryCmp = "#"+parentID;
	var chElements = $(JQueryCmp).children();
	
	for(var index = 0; index < chElements.length; index++) {
		var newID = parentID + "_" + (parseInt(index)+1);
		var JQueryCmp = "#"+chElements[index].id; 
		
		$(JQueryCmp).attr('id', newID);
	}
}

function showByParents(arrayParents) {
	for(var index=0; index<arrayParents.length; index++) {
		var jQueryCmp = "#"+arrayParents[index];
		var childs = $(jQueryCmp).children();
		
		for(var idx=0; idx<childs.length; idx++) {
			var divID = childs[idx].id;
			
			var jQuerylbl = "#"+divID+" .lblSpan";
			var jQueryCombo = "#"+divID+" .combobox";
			
			$(jQueryCombo).css("display", "inline");
			$(jQuerylbl).css("display", "none");
			
			css();
			
			$("#"+divID).click( function() {
				algoQueHaceCuandoDasClick(this);
			});
		}
	}
}